#pragma once
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

#include "Util.hpp"

const std::string sep = "\r\n";
const std::string default_root = "./wwwroot"; // web根目录
const std::string home_page = "index.html";   //

class Request
{
public:
    Request() {}
    ~Request() {}
    void parse()
    {
        // 1. 从outbuffer里面获取第一行的，分割符是""\r\n"
        std::string line = Util::getOneLine(inbuffer, sep); // 静态方法可以这样调用
        if (line.empty())
            return;
        // 2.从请求字段种提取三个字段

        std::stringstream ss(line);
        ss >> method >> url >> httpversion; // 这里会自动以空格为分割符，流输入到这三个方法中
        // 2.1 a/b/c.py？name=zhangsan&pwd=12345
        // 通过问号可以把左右两部分分开
        // 如果是POST方法，本来就是分离的!
        // 左边是PATH，右边是参数parm

        // 3. 添加web默认路径
        path = default_root; // ./wwwroot
        path += url;         // ./wwwroot/a/b/c.html
        if (path[path.size() - 1] == '/')
            path += home_page;

        // 4. 获取path对应的资源后缀
        //  ./wwwroot/index.html
        auto pos = path.rfind(".");
        if (pos == std::string::npos)
            suffix = nullptr;
        else
            suffix = path.substr(pos); //.html   .jpg

        // 5. 获取文件的大小
        // 可以通过stat函数获取
        struct stat st_stat;
        stat(path.c_str(),&st_stat);
        size = st_stat.st_size;
    }

public:
    std::string inbuffer;

    std::string method;
    std::string url;
    std::string httpversion;
    std::string path;
    std::string suffix;
    int size;

    std::string parm;
};

class Response
{

public:
    std::string outbuffer; // 用来接受所有的
};
